ivantracefandomcom_es-20200215-history
Insertar datos de energia consumida
(2-3-2012) Información en mails Timo y Enrique: Enrique: we have studied HDTrace and are getting ready to start modifying it. As we will have to modify the codes so that a call to the routine that starts/ends the tracing system will start/stop our internal powermeters, I am afraid that we would need access to the source files. Is there any "copyright" problem? Alternatively, we could try to interface externally, by maintaining our own calls to start/stop the powermeters. In any case, we will need information about the format power data is stored in the corresponding '.stat' archive. Timo: > the code is open source - so you are free to modify it. > But there is no need to touch the code to store the power information in > the stat-File. > Just use the example I prepared for you on the system. > Unfortunately, I dont remember the name of the example file. > I'm at the moment out of office and cannot access the archive, since it > is on my other machine. > I'll be back in office on Thursday and will send you the name of the > example file, if you didn't figure it out by yourself. Enrique: '''We'll try that. We know the filename but, as the data is in binary, we are unsire about the format... '''Timo: But as far as I understand, you don't need to know the details about the format. '''Enrique: '''Our plan was to produce the power data using our library, storing in an archive with the same format used by sunshot.... '''Timo: '''And you should use the hdstats interface for this purpose, which creates the stat files - as used in the example. Enrique: la interfaz que comenta Timo debe estar formada por las rutinas db_initConnectionWithArgs, db_pushNodeMetric, db_finishConnection. De hecho, en el ejemplo que nos pasa (testapp.c) se muestra cómo meter 3 valores en la "base de datos" power. Asumo que el resultado de eso es que al final de la ejecución esos valores quedarán guardados en el fichero *Energy.stat. Puedes hacer unas pocas pruebas, usando la rutina db_pushNodeMetric para meter una serie de valores y comprobar que, efectivamente, el tamaño de ese fichero *Energy.stat va creciendo. Busca también información sobre las rutinas anteriores, a ver si está el código fuente en alguna parte de lo que tiene Timo instalado. Según comenta Timo, las llamadas a las rutinas anteriores debería hacerlas otro nodo, entiendo que para nosotros spine. (5-3-2012) db_initConnectionWithArgs: /** * creates connection to database * @param bufferSize Size of the internal query buffer. bufferSize count of queries are grouped into one database query to avoid TCP overhead * @param conninfo http://www.postgresql.org/docs/8.4/static/libpq-connect.html or database name (= filename) for SQLITE * @return OK or in case of error DB_CONNECTION_FAILED */ int db_initConnectionWithArgs(int bufferSize, const char *conninfo); Ejemplo: db_initConnectionWithArgs(1, "dbname = metrics user = power password = power"); db_pushNodeMetric: /** * inserts timestamp and value in the database table for node depending on metric * @param metric Metric to push * @param node Name of the node * @param timestamp Timestamp in microseconds * @param value Value to push * @return OK or in case of error DB_CONNECTION_FAILED, QUERY_FAILED */ int db_pushNodeMetric(const char * metric, const char * node, uint64_t timestamp, double value); Ejemplos: db_pushNodeMetric("power", hostname, getSystemTimestamp(), 0); db_pushNodeMetric("power", hostname, getSystemTimestamp(), 100); db_pushNodeMetric("power", hostname, getSystemTimestamp(), 0); db_finishConnection: /** * Finished the connection. Must be called. */ void db_finishConnection(void); Ejemplo: db_finishConnection(); Ejecución y conclusiones: Modificando el código del ejemplo dejado por Timo (testapp) se observa que en cada ejecución de la instrucción db_pushNodeMetric en el archivo testapp_watts1_Energy.stat se escribe un dato. Ahora se debe averiguar como se coordina con los tiempos de los demás datos para que en la gráfica los datos se correspondan. Los datos se escriben en el fichero en formato double por lo que no se pueden ver sus valores de forma directa. Como el pm_lib primero lee todos los datos y al final los escribe, simplemente hemos de hacer que los escriba en el fichero testapp_watts1_Energy.stat También se podría intentar que el pm_lib vaya ejecutando instrucciones db_pushNodeMetric durante la ejecución pero creo que esto seria más complejo. La segunda opción está totalmente descartda por la imposibilidad de manejar los datos de uno en uno en tiempo de ejecución. Solo disponemos de los datos al terminar la ejecución y ejecutar el pm_print correspondiente. Reunión Enrique y Rafa: Desde un punto de vista mucho más exporto me han indicado cuales son los siguientes pasos a realizar para adaptar (o juntar) los datos del HDTrace y los del pm_lib de forma correcta. Para iniciar y definir los datos de las trazas se usa la función start_tracing y para finalizar se usa la función stop_tracing. Desde este momento tendré que añadir a estas funciones todo lo necesario para que se inicie el pm_lib y se finalize. La integración será visible por ahora y tendrá que ser copiada o definida por cada usuario que desee obtener los datos. Este detalle lo dejo para el futuro cuando ya funcione esta parte, aunque no creo que sea un punto imprescindible en el proyecto. Siguiente paso: Juntar HDTrace y pm_lib